// class Solution {
// public:
//     void down(vector<int>& nums, int u, int n) {
//         int t = u;
//         if (2 * u + 1 <= n && nums[u] < nums[2 * u + 1]) {
//             t = 2 * u + 1;
//         }
//         if (2 * u + 2 <= n && nums[2 * u + 2] > nums[t]) {
//             t = 2 * u + 2;
//         }
//         if (t != u) {
//             swap(nums[t], nums[u]);
//             down(nums, t, n);
//         }
//     }
//     int findKthLargest(vector<int>& nums, int k) {
//         int n = nums.size() - 1;
//         for (int i = (n - 1) / 2; i >= 0; i--) {
//             down(nums, i, n);
//         }
//         k -= 1;
//         while (k--) {
//             swap(nums[0], nums[n]);
//             n -= 1;
//             down(nums, 0, n);
//         }
//         return nums[0];
//     }
// };

class Solution {
public:
    int findKthLargest(vector<int>& nums, int k) {
        priority_queue<int> q;
        for (const auto& e : nums)
            q.push(e);
        while (--k)
            q.pop();
        return q.top();
    }
};